package librarydemo;

/** Main: 固定脚本走一遍“加书→加读者→借→续→还”，满足演示要求 */
public class Main {
    public static void main(String[] args) {
        Library lib = new Library();

        // ===== 种子数据 =====
        lib.addBook(new Book("B001", "Algorithms", "Sedgewick"));
        lib.addBook(new Book("B002", "Clean Code", "Robert C. Martin"));

        // [要求-继承] 使用 VipReader 展示继承/多态（更高的借书上限）
        Reader alice = new Reader("S1001", "Alice");      // 普通读者（上限2）
        Reader bob   = new VipReader("S1002", "Bob");     // VIP 读者（上限5）
        lib.registerReader(alice);
        lib.registerReader(bob);

        // ===== 展示当前数据 =====
        System.out.println("-- 书目 --");
        lib.listBooks().forEach(System.out::println);
        System.out.println("-- 读者 --");
        lib.listReaders().forEach(System.out::println);

        // ===== 借书（借期用统一常量） =====
        System.out.println("\n== Alice 借 B001（" + Library.DEFAULT_LOAN_DAYS + " 天） ==");
        Library.Loan l1 = lib.borrow("B001", "S1001", Library.DEFAULT_LOAN_DAYS);
        System.out.println(l1);

        // ===== 续借（+7天常量） =====
        System.out.println("\n== L1 续借 +" + Library.DEFAULT_RENEW_DAYS + " 天 ==");
        lib.renew(l1.loanId, Library.DEFAULT_RENEW_DAYS);
        System.out.println(l1);

        // ===== 归还 =====
        System.out.println("\n== 归还 L1 ==");
        lib.returnBook(l1.loanId);
        System.out.println(l1);

        // ===== 再借给 Bob（VIP 展示上限更高） =====
        System.out.println("\n== Bob 借 B001（7 天） ==");
        Library.Loan l2 = lib.borrow("B001", "S1002", 7);
        System.out.println(l2);

        // ===== 最终列表 & 小亮点：逾期检查 =====
        System.out.println("\n-- 当前借阅记录 --");
        lib.listLoans().forEach(System.out::println);

        System.out.println("\n-- 逾期检查 --");
        java.time.LocalDate today = java.time.LocalDate.now();
        for (Library.Loan l : lib.listLoans()) {
            boolean overdue = (l.returnDate == null) && l.dueDate.isBefore(today);
            System.out.println(l.loanId + " overdue? " + overdue);
        }

        System.out.println("\n(已将借/续/还写入 loans.csv，用于满足“文件存储”要求)");
    }
}
